package ar.pegasus.clasificador.boss;

import java.io.File;

import ar.pegasus.framework.util.StringUtil;
import ar.pegasus.framework.util.log.PLogger;

/**
 * Esta clase se usa para recuperar algunos parametros de configuración 
 * que dependerán de que parte se ejecute en un servidor (Consulta Web) o en una 
 * maquina local (Automata,Catalogador).
 * 
 * @author oarias
 */
public class BossConfiguracionApp {

	private static BossConfiguracionApp instance = null;
    static PLogger logger = null;
    	
	
	public static  BossConfiguracionApp getInstance(){
		if(instance == null)
			instance = new BossConfiguracionApp();
		return instance;
	}
	
	private boolean ejecutaLocal = false;
	private boolean modoDebug = false;
	private String applicationName;
	private String NumeroRelease  = "1.0.0";
	private String versionDesktop = "1.0.0";
	private String rangoEjecucionInicio;
	private String rangoEjecucionFin;
	private String automataPropertiesFile;
	private boolean DebeAbrirVentanaConfiguracion = false;
	
	public BossConfiguracionApp(){
		String keyAppName = System.getProperty(AppConstantes.APP_NAME);

		setApplicationName(keyAppName);
		ejecutaLocal = !(StringUtil.isNullOrEmpty(keyAppName));
		String iniciarEn = System.getProperty(AppConstantes.INITIAL_DIR) ;
		if(ejecutaLocal){
			// validar que la aplicacion tenga los paths que necesita.
	    	if (iniciarEn != null){
	    		File dir = new File(iniciarEn); 
				if (!dir.exists()) {
					dir.mkdirs();
				} 
	    	}else {
				System.out.println ("La property \""+ AppConstantes.INITIAL_DIR +"\"  no existe, se va a utilizar el directorio corriente.") ;
			}  	
		}
		// Creo el logger de la clase.
		logger = new PLogger(BossConfiguracionApp.class);
	}

	public void setApplicationName(String applicationName) {
		this.applicationName = applicationName;
	}
	public String getApplicationName() {
		return applicationName;
	}
	public void setVersionDesktop(String version) {
		this.versionDesktop = version;
	}
	public String getVersionDesktop() {
		return versionDesktop;
	}

	public void setModoDebug(boolean modo) {
		modoDebug = modo;
	}

	public boolean isModoDebug() {
		return modoDebug;
	}

	public void setRangoEjecucionInicio(String rangoEjecucionInicio) {
		this.rangoEjecucionInicio = rangoEjecucionInicio;
		
	}

	public void setRangoEjecucionFin(String rangoEjecucionFin) {
		this.rangoEjecucionFin = rangoEjecucionFin;
		
	}

	public String getRangoEjecucionInicio() {
		return rangoEjecucionInicio;
	}

	public String getRangoEjecucionFin() {
		return rangoEjecucionFin;
	}
	
	public int getHoraInicioEjecucion(){
		return Integer.parseInt(rangoEjecucionInicio.split(":")[0]);
	}

	public int getMinutosInicioEjecucion(){
		return Integer.parseInt(rangoEjecucionInicio.split(":")[1]);
	}

	public int getHoraFinEjecucion(){
		return Integer.parseInt(rangoEjecucionFin.split(":")[0]);
	}

	public int getMinutosFinEjecucion(){
		return Integer.parseInt(rangoEjecucionFin.split(":")[1]);
	}

	public void setAutomataPropertiesFile(String propertiesFile) {
		automataPropertiesFile = propertiesFile;
	}

	public String getAutomataPropertiesFile() {
		return automataPropertiesFile;
	}

	public void setDebeAbrirVentanaConfiguracion(boolean b) {
		DebeAbrirVentanaConfiguracion  = b;
		
	}

	public boolean isDebeAbrirVentanaConfiguracion() {
		return DebeAbrirVentanaConfiguracion;
	}

	public Integer getIntentosPermitidos() {
		return 3;
	}

	public void setNumeroRelease(String numeroRelease) {
		NumeroRelease = numeroRelease;
	}

	public String getNumeroRelease() {
		return NumeroRelease;
	}

}
